import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import java.rmi.*;
import java.math.BigInteger;
public class FibonacciApplet extends Applet {
	private TextArea resultArea
		= new TextArea("", 20, 72, TextArea.SCROLLBARS_BOTH);
	private TextField inputArea = new TextField(24);
	private Button calculate = new Button("Calculate");
	private String server;
	public void init( ) {
		this.setLayout(new BorderLayout( ));
		Panel north = new Panel( );
		north.add(new Label("Type a non-negative integer"));
		north.add(inputArea);
		north.add(calculate);
		this.add(resultArea, BorderLayout.CENTER);
		this.add(north, BorderLayout.NORTH);
		Calculator c = new Calculator( );
		inputArea.addActionListener(c);
		calculate.addActionListener(c);
		resultArea.setEditable(false);
		server = "rmi://" + this.getCodeBase().getHost( ) + "/fibonacci";
	}
	class Calculator implements ActionListener {
		public void actionPerformed(ActionEvent e) {
			try {
				String input = inputArea.getText( );
				if (input != null) {
					BigInteger index = new BigInteger(input);
					Fibonacci f = (Fibonacci) Naming.lookup(server);
					BigInteger result = f.getFibonacci(index);
					resultArea.setText(result.toString( ));
				}
			}
			catch (Exception ex) {
				resultArea.setText(ex.getMessage( ));
			}
		}
	}
}
